package com.wy.base;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @apiNote
 * @author ParadiseWY
 * @date 2019年10月11日
 */
public interface BaseMapper<T> {

	/**
	 * 新增
	 * 
	 * @param t 新增的数据
	 * @return 回显主键的值
	 */
	Serializable create(T t);

	/**
	 * 批量新增
	 * 
	 * @param t 新增的数据
	 * @return 回显主键的值
	 */
	Serializable creates(List<T> ts);

	/**
	 * 单条数据删除
	 * 
	 * @param id 主键编号
	 * @return 影响行数
	 */
	int delete(Serializable id);

	/**
	 * 批量删除数据
	 * 
	 * @param ids 主键编号集合
	 * @return 影响行数
	 */
	int deletes(List<? extends Serializable> ids);

	/**
	 * 根据参数中条件进行删除
	 * 
	 * @param params 条件
	 * @return 影响行数
	 */
	int deletes(Map<String, Object> params);

	/**
	 * 表中所有字段都进行更新,若是字段值为null,则会将表中字段置null
	 * 
	 * @param t 需要进行更新的实体
	 * @return 影响行数
	 */
	int modify(T t);

	/**
	 * 参数中的非null值字段进行更新,null值不更新
	 * 
	 * @param t 需要进行更新的实体
	 * @return 影响行数
	 */
	int modifyNotNull(T t);

	/**
	 * 只更新参数中的字段
	 * 
	 * @param params 需要更新的数据
	 * @return 影响行数
	 */
	int modifySpecial(Map<String, Object> params);

	/**
	 * 获得表中字段的最大值,只可对整数类型有效
	 * 
	 * @param column 字段
	 * @return 最大值
	 */
	long getMax(String column);

	/**
	 * 根据表主键查询详情信息
	 * 
	 * @param id 主键编号
	 * @return 详情
	 */
	Map<String, Object> getById(Serializable id);

	/**
	 * 根据表主键批量查询详情信息
	 * 
	 * @param ids 主键编号
	 * @return 详情
	 */
	List<Map<String, Object>> getByIds(List<? extends Serializable> ids);

	/**
	 * 查单张表中数据
	 * 
	 * @param pager 分页参数,不传查全部数据.参数只能是实体类中字段,且只能查=条件的值
	 * @return 分页数据
	 */
	List<T> getEntitys(T model);

	/**
	 * 查单张表中数据
	 * 
	 * @param params 任意参数,分页参数可传可不传,只能查=条件的值
	 * @return 分页数据
	 */
	List<T> getEntitys(Map<String, Object> params);

	/**
	 * 分页查询多表数据
	 * 
	 * @param params 分页参数,不传查全部数据
	 * @return 分页数据
	 */
	List<Map<String, Object>> getList(Map<String, Object> params);

	/**
	 * 分页查询多表数据
	 * 
	 * @param page 分页参数,不传查全部数据
	 * @return 分页数据
	 */
	List<Map<String, Object>> getList(AbstractPage page);
}